package cz.cvut.fel.y36pda.hs.masekji4.jirina.main;

import cz.cvut.fel.y36pda.hs.masekji4.jirina.screens.login.LoginScreen;
import cz.cvut.fel.y36pda.hs.masekji4.jirina.setting.MD5;
import cz.cvut.fel.y36pda.hs.masekji4.jirina.setting.Setting;
import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import net.rim.device.api.ui.UiApplication;

/**
 * Třída <code>Main</code> zajišťuje spuštění aplikace a obstarává čtení a zápis
 * nastavení do paměti telefonu.
 *
 * @author masekji4@fel.cvut.cz
 */
public class Main extends UiApplication {

    private static Setting setting;
    private static PersistentObject store;

    /**
     * Spustí program.
     *
     * @param args      parametry
     */
    public static void main(String[] args) {
        Main instance = new Main();
        instance.enterEventDispatcher();
    }

    /**
     * Vytvoří instanci třídy <code>Main</code>.
     */
    public Main() {
        initStore();
        loadSetting();
        
        LoginScreen screen = new LoginScreen();
        pushScreen(screen);
    }

    /**
     * Inicializuje atribut <code>store</code> a umožní tak přístup k
     * perzistentnímu objektu s nastavením aplikace.
     */
    private static void initStore() {
        store = PersistentStore.getPersistentObject(0xb5bffb1b7d1b55dfL);
    }

    /**
     * Uloží nastavení aplikace do paměti telefonu.
     *
     * @param code      univerzální kód
     * @param number    telefonní číslo Jiřiny
     */
    public static void saveSetting(String code) {
        synchronized (store) {
            setting.setCode(MD5.getHash(code));

            store.setContents(setting);
            store.commit();
        }
    }

    /**
     * Načte z paměti telefonu nastavení aplikace.
     */
    private static void loadSetting() {
        synchronized (store) {
            setting = (Setting) store.getContents();

            if (setting == null) {
                setting = new Setting();

                setting.setCode("81dc9bdb52d04dc20036dbd8313ed055");
            }
        }
    }

    /**
     * Ověří platnost zadaného univerzálního kódu.
     *
     * @param code  testovaný přístupový kód
     * @return      <code>true</code>, shoduje-li se zadaný přístupový kód
     *              s nastaveným
     */
    public static boolean isRight(String code) {
        return setting.getCode().compareTo(MD5.getHash(code)) == 0;
    }
}
